package 剑指offer;

import java.util.Arrays;

import org.junit.Test;

public class _56_1数组中数字出现的次数 {
	@Test
	public void test() {
		int []a = {1,2,2,4,4,6};
		
		System.out.println(Arrays.toString(singleNumbers(a)));;
	}
	
	/**
	 * 
	 *@time 2021年3月21日下午4:04:02
	 * 
	 *@param nums
	 *@return int[]
	 *
	 *@see 两个操作数的位中，相同则结果为0，不同则结果为1。
	 *通过^ 异或运算的规则可以使得，相同的数转换成0，然后自剩下a^b ，a^b中都是他们自己不相同的二进制
	 *通过 & 运算 找到得到其中一个数的一位为0的
	 *然后在分开得到两个不相同的数
	 */
	 public int[] singleNumbers(int[] nums) {
		 int n=0,x=0,y=0,m=1;
		 for (int i : nums) {
			n ^= i;
		}
		 while((n&m)==0)
			 m<<=1;
		 for (int i : nums) {
			if((i&m)!=0) x ^= i;
			else y ^= i;
		}
		return new int[] {x,y};

	    }
}
